﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MoiGioiHDBank.DTO;
using MoiGioiHDBank.DAO;
using System.Net;

namespace MoiGioiHDBank
{
    public partial class ChuyenTien : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btChuyenTien_Click(object sender, EventArgs e)
        {
            int soTien;

            bool dung = int.TryParse(this.tbSoTien.Text, out soTien);
            if (KiemTraThamSo() == false)
            {
                this.lbKetQua.Text = "bạn chưa nhập đủ thông tin";
            }
            else
            {
                if (dung != true || MineUtils.KiemTraTienGui(soTien) != true)
                {
                    this.lbKetQua.Text = "số tiền phải là bội của 10k";
                }
                else
                {
                    this.lbKetQua.Text = ThucHienChuyenTien(this.tbSID.Text, this.tbSoTheGui.Text, this.tbSoTheNhan.Text, soTien);
                }
            }
        }

        private bool KiemTraThamSo()
        {
            if (this.tbSID.Text == "" || this.tbSoTheGui.Text == "" || this.tbSoTheNhan.Text == "" || this.tbSoTien.Text == "")
            {
                return false;
            }
            return true;
        }

        private string ThucHienChuyenTien(string sid, string theGui, string theNhan, int soTien)
        {
            int result = MineUtils.SIDChecker(sid);
            if (result == 0) // con timeout
            {
                CardSystem.EMVServices cs = new CardSystem.EMVServices();
                string tenNganHangGui = cs.GetBankCommercialNameOfCreditCard(theGui);// sử dung ws của thẩy để lấy tên thẻ gửi
                if (tenNganHangGui != "CardNotExits")
                {
                    LienKetNganHang moigioinganhanggui = LienKetNganHangDAO.LayThongTinNganHangLienKet(tenNganHangGui);
                    if (moigioinganhanggui == null)
                    {
                        result = -13;
                        //kq = "không hỗ trợ ngân hàng thẻ gửi";
                        // trả về -2
                    }
                    else // có liên kết với ngân hàng thẻ gửi
                    {
                        result = GoiNganHangChuyenTien(theGui, theNhan, soTien, moigioinganhanggui);
                    }
                }
                else
                {
                    // card not exits
                    //kq = "số thẻ gửi không tồn tại";
                    result = -14;
                }
            }
            return ThongBaoKetQuaChuyenTien(result);
        }

        private string ThongBaoKetQuaChuyenTien(int kq1)
        {
            switch (kq1)
            {
                case 0:
                    return "số thẻ gửi không đủ tiền chuyển";
                case -1:
                    return "chưa thiết lập kết nối với ngân hàng gửi";
                case -2:
                    return "số thẻ gửi không hợp lệ";
                case -3:
                    return "số thẻ nhận không hợp lệ";
                case -5:
                    return "số tiền gửi không phải là bội của 1K";
                case -10:
                    return "ngân hàng thẻ nhận chưa hỗ trợ";
                case -11:
                    return "";
                case -13:
                    return "không hỗ trợ ngân hàng thẻ gửi";
                case -14:
                    return "số thẻ gửi không tồn tại";
                case -99:
                    return "hết phiên kết nối";
                case -100:
                    return "sid không hợp lệ";
                default:
                    return "số tiền bạn đã bị trừ: " + kq1.ToString();
            }
        }

        private int GoiNganHangChuyenTien(string soTheGui, string soTheNhan, int soTienGui, LienKetNganHang moiGioiNganHangGui)
        {
            //int kq = 0;
            //string sid = (string)WSProxy.CallWebService(moigioinganhanggui.URL, moigioinganhanggui.TenWebservice, "Login", new object[] { moigioinganhanggui.UserName, moigioinganhanggui.Password });
            //kq = (int)WSProxy.CallWebService(moigioinganhanggui.URL, moigioinganhanggui.TenWebservice, "Tranfer", new object[] { sid, theGui, theNhan, soTien });
            //return kq;

            int kq = -1;
            switch (moiGioiNganHangGui.TenNganHang)
            {
                case "MSB":
                    MaritimeBankWS.ServiceMaritimeBank wsbankMB = new MaritimeBankWS.ServiceMaritimeBank();
                    wsbankMB.CookieContainer = new CookieContainer();
                    string sidMB = wsbankMB.Login(moiGioiNganHangGui.UserName, moiGioiNganHangGui.Password);
                    kq = wsbankMB.Transfer(sidMB, soTheGui, soTheNhan, soTienGui);
                    return kq;
                case "NAB":
                    NamABankWS.Service1 wsbankNA = new NamABankWS.Service1();
                    wsbankNA.CookieContainer = new CookieContainer();
                    string sidNA = wsbankNA.Login(moiGioiNganHangGui.UserName, moiGioiNganHangGui.Password);
                    kq = wsbankNA.Tranfer(sidNA, soTheGui, soTheNhan, soTienGui);
                    return kq;
                default:
                    string sid = (string)WSProxy.CallWebService(moiGioiNganHangGui.URL, moiGioiNganHangGui.TenWebservice, "Login", new object[] { moiGioiNganHangGui.UserName, moiGioiNganHangGui.Password });
                    kq = (int)WSProxy.CallWebService(moiGioiNganHangGui.URL, moiGioiNganHangGui.TenWebservice, "Tranfer", new object[] { sid, soTheGui, soTheNhan, soTienGui });
                    return kq;
            }
        }
    }
}